home *** CD-ROM | disk | FTP | other *** search
- package sun.java2d;
-
- import java.lang.ref.PhantomReference;
- import java.lang.ref.Reference;
- import java.lang.ref.ReferenceQueue;
- import java.lang.ref.WeakReference;
- import java.security.AccessController;
- import java.util.Hashtable;
- import sun.security.action.GetPropertyAction;
- import sun.security.action.LoadLibraryAction;
-
- public class Disposer implements Runnable {
- private static final ReferenceQueue queue = new ReferenceQueue();
- private static final Hashtable records = new Hashtable();
- private static Disposer disposerInstance;
- public static final int WEAK = 0;
- public static final int PHANTOM = 1;
- public static int refType = 1;
-
- public static void addRecord(Object var0, long var1, long var3) {
- disposerInstance.add(var0, new DefaultDisposerRecord(var1, var3));
- }
-
- public static void addRecord(Object var0, DisposerRecord var1) {
- disposerInstance.add(var0, var1);
- }
-
- synchronized void add(Object var1, DisposerRecord var2) {
- if (var1 instanceof DisposerTarget) {
- var1 = ((DisposerTarget)var1).getDisposerReferent();
- }
-
- Object var3;
- if (refType == 1) {
- var3 = new PhantomReference(var1, queue);
- } else {
- var3 = new WeakReference(var1, queue);
- }
-
- records.put(var3, var2);
- }
-
- public void run() {
- while(true) {
- try {
- Reference var1 = queue.remove();
- ((Reference)var1).clear();
- DisposerRecord var2 = (DisposerRecord)records.remove(var1);
- var2.dispose();
- Object var4 = null;
- Object var5 = null;
- } catch (Exception var3) {
- System.out.println("Exception while removing reference: " + var3);
- var3.printStackTrace();
- }
- }
- }
-
- private static native void initIDs();
-
- public static void addReference(Reference var0, DisposerRecord var1) {
- records.put(var0, var1);
- }
-
- public static void addObjectRecord(Object var0, DisposerRecord var1) {
- records.put(new WeakReference(var0, queue), var1);
- }
-
- public static ReferenceQueue getQueue() {
- return queue;
- }
-
- // $FF: synthetic method
- static Disposer access$000() {
- return disposerInstance;
- }
-
- static {
- AccessController.doPrivileged(new LoadLibraryAction("awt"));
- initIDs();
- String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("sun.java2d.reftype"));
- if (var0 != null) {
- if (var0.equals("weak")) {
- refType = 0;
- System.err.println("Using WEAK refs");
- } else {
- refType = 1;
- System.err.println("Using PHANTOM refs");
- }
- }
-
- disposerInstance = new Disposer();
- AccessController.doPrivileged(new 1());
- }
- }
-